package com.dlc.shop.user.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dlc.shop.bean.app.dto.CouponDto;
import com.dlc.shop.bean.model.User;
import com.dlc.shop.bean.vo.ShopCustomerVO;
import com.dlc.shop.common.util.PageParam;
import com.dlc.shop.user.common.dto.CostPerPopupDTO;
import com.dlc.shop.user.common.model.CostPerPopup;
import com.dlc.shop.user.common.vo.CostPerPopupVO;

import java.util.List;

/**
 * 弹窗广告
 * @author TRACK
 */
public interface CostPerPopupService extends IService<CostPerPopup> {

    /**
     * 分页获取弹窗广告列表
     * @param pageDTO 分页参数
     * @param costPerPopupDTO 查询参数
     * @return 弹窗广告列表分页数据
     */
    IPage<CostPerPopupVO> page(PageParam<CostPerPopupVO> pageDTO, CostPerPopupDTO costPerPopupDTO);

    /**
     * 根据店铺id获取弹窗广告列表（缓存）
     * @param shopId
     * @return
     */
    List<CostPerPopupVO> listByShopId(Long shopId);

    /**
     * 获取当前可以推送的商家弹窗
     * @param shopCustomerVO
     * @param pageType
     * @param shopId
     * @param userId
     * @param uuid
     * @return
     */
    CostPerPopupVO getShopPopupByCondition(ShopCustomerVO shopCustomerVO, Integer pageType, Long shopId, String userId, String uuid);

    /**
     * 获取当前可以推送的平台弹窗
     * @param user
     * @param pageType
     * @param uuid
     * @return
     */
    CostPerPopupVO getSysPopupByCondition(User user, Integer pageType, String uuid);

    /**
     * 根据弹窗广告id获取弹窗广告
     * @param popupId 弹窗广告id
     * @return 弹窗广告
     */
    CostPerPopupVO getByPopupId(Long popupId);

    /**
     * 组装数据
     * @param costPerPopupVO
     */
    void handleInfo(CostPerPopupVO costPerPopupVO);

    /**
     * 保存弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void insert(CostPerPopup costPerPopup);

    /**
     * 更新弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void update(CostPerPopup costPerPopup);

    /**
     * 根据弹窗广告id删除弹窗广告
     * @param shopId
     * @param popupId 弹窗广告id
     */
    void deleteById(Long popupId, Long shopId);

    /**
     * 根据弹窗广告id失效弹窗广告
     * @param popupId 弹窗广告id
     * @param shopId
     */
    void invalid(Long popupId, Long shopId);

    /**
     * 根据参数获取对应列表
     * @param costPerPopup 参数
     * @return 列表
     */
    List<CostPerPopupVO> listByParam(CostPerPopup costPerPopup);

    /**
     * 投放弹窗广告
     * @return
     */
    List<Long> putOnAdvertise();

    /**
     * 结束弹窗广告
     * @return
     */
    List<Long> endAdvertise();

    /**
     * 获取需要改变状态弹窗的店铺id
     * @return
     */
    List<Long> listShouldChangePopUp();

    /**
     * 删除弹窗广告商品关联
     * @param relateId 商品id或者等级id
     * @param shopId
     */
    void deletePopupByRelate(Long relateId, Long shopId);

    /**
     * 批量删除缓存
     * @param popupIds
     * @param shopIds
     */
    void removeCacheBatch(List<Long> popupIds, List<Long> shopIds);

    /**
     * 获取重复周数
     * @param costPerPopup
     * @param dbCostPerPopup
     * @return
     */
    List<String> getDuplicateList(CostPerPopup costPerPopup, CostPerPopupVO dbCostPerPopup);

    /**
     * 删除关联页面
     * @param linkId
     * @param shopId
     * @param type
     * @param categoryIds
     */
    void deleteLink(Long linkId, Long shopId, String type, List<Long> categoryIds);

    /**
     * 下架商家
     * @param shopIds
     */
    void offlineShop(List<Long> shopIds);

    /**
     * 批量下架优惠券
     * @param couponList
     */
    void deleteLinkBatch(List<CouponDto> couponList);
}
